a tool for shared writing and social publishing
1"use client";
2import { Fact, PermissionToken, ReplicacheProvider } from "src/replicache";
3import type { Attribute } from "src/replicache/attributes";
4import { SelectionManager } from "components/SelectionManager";
5import { Pages } from "components/Pages";
6import {
7 ThemeBackgroundProvider,
8 ThemeProvider,
9} from "components/ThemeManager/ThemeProvider";
10import { LeafletFooter } from "./Footer";
11import { EntitySetProvider } from "components/EntitySetProvider";
12import { AddLeafletToHomepage } from "components/utils/AddLeafletToHomepage";
13import { UpdateLeafletTitle } from "components/utils/UpdateLeafletTitle";
14import { useUIState } from "src/useUIState";
15import { LeafletLayout } from "components/LeafletLayout";
16
17export function Leaflet(props: {
18 token: PermissionToken;
19 initialFacts: Fact<Attribute>[];
20 leaflet_id: string;
21}) {
22 return (
23 <ReplicacheProvider
24 rootEntity={props.leaflet_id}
25 token={props.token}
26 name={props.leaflet_id}
27 initialFacts={props.initialFacts}
28 >
29 <EntitySetProvider
30 set={props.token.permission_token_rights[0].entity_set}
31 >
32 <ThemeProvider entityID={props.leaflet_id}>
33 <ThemeBackgroundProvider entityID={props.leaflet_id}>
34 <UpdateLeafletTitle entityID={props.leaflet_id} />
35 <AddLeafletToHomepage />
36 <SelectionManager />
37 {/* we need the padding bottom here because if we don't have it the mobile footer will cut off...
38 the dropshadow on the page... the padding is compensated by a negative top margin in mobile footer */}
39 <LeafletLayout className="!pb-[64px] sm:!pb-6">
40 <Pages rootPage={props.leaflet_id} />
41 </LeafletLayout>
42 <LeafletFooter entityID={props.leaflet_id} />
43 </ThemeBackgroundProvider>
44 </ThemeProvider>
45 </EntitySetProvider>
46 </ReplicacheProvider>
47 );
48}